Function calling
これ何?一言で
LLMが事前に定義された関数の呼び出しの要否を判断して、コールする機能のことを指す。
たとえば、LLMに「今日の天気を教えてください」と尋ねると、LLMは天気予報を取得する関数を呼び出して、結果をユーザーに返すことができる。
2023年6月のアップデートで、使えるようになった
この機能が解決してくれたこと
ライブラリーを使うと、バージョンアップに伴う変更でエラーが発生することがある
プロンプトチューニングをしなくていい
従来、ライブラリで用意されているデフォルトのプロンプトでは期待通りの動作を得られにくい課題があった。
そのため、ライブラリの一部の機能を使いつつ、核となるプロンプトをチューニングして埋め込む工夫を行っていた。
これが結構大変で、1文変わるだけでモデルの出力が大きくかわっていた。
ライブラリを使わなければ、この問題自体なくなる。
本質的に何か新しいことができるようになった訳ではないとも言えます。 Function callingを使わなくても、AIが返してきた自然言語の文章から頑張って正規表現などで必要な要素を拾ってあげて関数を実行する、 ということはこれまでもできました。 返答のフォーマットを厳しく指定することでかなりの精度でフォーマットに従った回答が得られるので、 そこそこ問題なく動くシステムを作ることもできたかと思います。
一方Function callingを使うと、関数に渡す引数という形で要素の抽出ができるようになりますので、 フォーマットに従わせるという工夫が不要になります。 これまで泣く泣く、AIを強い言葉で脅迫してフォーマットを強制するという行為を行っていた人は、 AIとまた仲良くやり直すチャンスになりそうです。 運用的にも、プロンプトに色々な注文をつけると制御が煩雑になるということも大いにあるので、 この辺をシンプルにできるのもメリットです。 もちろんAPIがサポートしている手法ということで、 プロンプトと正規表現による気合い実装とは、信頼性という点で大きなアドバンテージがあります。 また今回は深く触れていませんが、enumがあることで表記揺れなどにもかなり強くなっている所も見逃せません。
トータルすると、これまではユーザが頑張って積み木を積み上げて作っていたものに対して、 公式がしっかりとした制作キットを用意してくれたという感じでしょうか。 「積み木を積み上げれば元から作れたよ」と感じる人もいれば、 「制作キットが出たからやっと自分でも作れる!」と感じる人いて、印象は人によるとは思いますが、 趣味ではなくしっかりとしたシステムを作るのであれば、制作キットを使っておきたい所です。
内部で行われる3つの処理
(AIが)質問に必要な関数を選び、引数を作成する
(プログラムが)関数を実行
(AIが)関数結果も入力に入れて質問に回答する
https://scrapbox.io/files/65851bfbae4c830023d646c3.png
OpenAI解説
開発者はgpt-4-0613とgpt-3.5-turbo-0613に関数を記述することができるようになり、モデルはそれらの関数を呼び出すための
引数を含むJSONオブジェクトを出力するようにインテリジェントに選択できるようになりました。これはGPTの機能を外部
のツールやAPIとより確実に接続するための新しい方法です。
これらのモデルは、(ユーザーの入力に応じて)関数を呼び出す必要があるときを検出し、関数のシグネチャに準拠した
JSONで応答するように微調整されています。関数を呼び出すことで、開発者はモデルから構造化されたデータをより確実に
取得することができます。例えば、開発者は次のことができます:
・外部ツール(ChatGPTプラグインなど)を呼び出して質問に答えるチャットボットを作成する。
・自然言語をAPIコールやデータベースクエリに変換する
・テキストから構造化データを抽出する
API reference:
https://scrapbox.io/files/658517eb8474370027709f76.png